package demo.Thread;

/**
 * @Auther: hjy(lc))
 * @Date: 2022/8/9-08-09-10:59
 * @Description：demo.Thread   创建线程
 */
/*
创建线程：
    方式一：
        继承Thread类，重写该类的run方法(换成自身要执行的逻辑)， 调用Thread.start()方法启动该线程
        ！！！  run方法中的异常只能捕获不能抛出
    方式二：
        匿名内部类：
        左边是父类，右边是子类 Thread thread = new Thread(){重写run方法};   thread.start() 启动线程
    方式三：
        实现Runnable接口， 重写run方法，执行逻辑， 通过Thread类启动线程  new Thread(new Runnable接口实现类).start()
通过继承和实现接口的区别：
    - 实现方式可以共享资源,继承不可以共享资源
    - 实现方式还可以继承其他类,继承方式不可以再继承其他类了
    - 资源共享方式有线程安全问题
 */
public class thread_create implements Runnable{
    public static void main(String[] args) {
        //线程对象
        myThread thread = new myThread();
        thread.run();     //该方式没有开启多线程，只是调用了线程中的普通方法
        thread.start();    //开启多线程

        //创建线程 方式3 Runnable接口
        System.out.println("--------------------");
        thread_create runnable = new thread_create();
        Thread thread2 = new Thread(runnable);
        thread2.setName("线程二");           //可以给当前线程更改名字
        thread2.start();
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName());   //线程二
        System.out.println("thread_create.run");
    }
}
class myThread extends Thread{
    @Override
    public void run() {            //Thread没有抛出异常，子类重写方法也不能抛出异常， 线程与线程间的异常不能传递
        System.out.println("myThread.run");
    }
}
